﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using SERIX.Util;
using Biblioteca.DataBase;
using Pms.Utils;
using System.Data.OracleClient;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1    
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public class CriteriosPesquisaMetasTec : CriteriosPesquisa
    {
        public string IdtTecnico { get; set; }
        public string Tecnico { get; set; }
        public string IdtMunicipio { get; set; }
        public string IdtPrograma { get; set; }
        public string IdtAcao { get; set; }
        public string IdtIndicador { get; set; }
    }

    public partial class MetasTecnicos : Seguranca
    {
        CriteriosPesquisaMetasTec criteriosPesquisa;

        private void lovSelecaoTecnico(string chave, string descricao)
        {
            txtNomeTecnico.Text = descricao;
            txtNomeTecnico.Attributes.Add("chave", chave);

            SqlMunicipios.SelectParameters["PARAM"].DefaultValue = chave;
            ddlMunicipios.DataBind();
            ddlMunicipios.Items.Insert(0, new ListItem());

            ddlProgramas.Items.Clear();
            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlMunicipios_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlProgramas.SelectParameters["P_IDT_MUN"].DefaultValue = ddlMunicipios.SelectedValue;
            ddlProgramas.DataBind();
            ddlProgramas.Items.Insert(0, new ListItem());

            ddlAcoes.Items.Clear();
            ddlIndicadores.Items.Clear();
        }

        protected void ddlProgramas_SelectedIndexChanged(object sender, EventArgs e)
        {
            SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = ddlProgramas.SelectedValue;
            ddlAcoes.DataBind();
            ddlAcoes.Items.Insert(0, new ListItem());

            ddlIndicadores.Items.Clear();
        }

        protected void ddlAcoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlIndicadores.Items.Clear();

            SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = ddlAcoes.SelectedValue;
            ddlIndicadores.DataBind();
            ddlIndicadores.Items.Insert(0, new ListItem());
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            InicializarCriteriosPesquisa();

            lovTecnicos.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecaoTecnico);
            lovTecnicos.ConfigurarLov("Serix", "SRX_TECNICOS", "IDT_TEC", "NOM_TEC", "NOM_TEC", "Pesquisa de Técnicos", "Nome");

            string login = usuAut.Login;

            if (!Page.IsPostBack)
            {

                Query qy = null;
                try
                {
                    Session["PagAtual"] = 1;
                    string SQL = @"SELECT IDT_TEC, NOM_TEC
                                    FROM SRX_TECNICOS
                                    WHERE IDT_TEC = F_OBTER_IDT_TEC_LOGADO";
                    try
                    {
                        qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);

                        DataTable dttTecnico = qy.ObterDataTable();

                        if (dttTecnico.Rows.Count > 0)
                        {
                            txtNomeTecnico.Text = dttTecnico.Rows[0]["NOM_TEC"].ToString();
                            txtNomeTecnico.Attributes.Add("chave", dttTecnico.Rows[0]["IDT_TEC"].ToString());

                            SqlMunicipios.SelectParameters["PARAM"].DefaultValue = dttTecnico.Rows[0]["IDT_TEC"].ToString();
                            ddlMunicipios.DataBind();
                            ddlMunicipios.Items.Insert(0, new ListItem());
                        }
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                catch
                //Em caso de erro, mostre todos
                {
                    if (qy.EstadoConexao() == ConnectionState.Open)
                        qy.FecharConexao();
                }
            }

            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Session["PagAtual"] = 1;
            }

        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaMetasTec)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaMetasTec() { FiltroSimples = "", PaginaAtual = 1 };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                //criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.IdtTecnico = txtNomeTecnico.Attributes["chave"].ToString();
                criteriosPesquisa.Tecnico = txtNomeTecnico.Text;
                criteriosPesquisa.IdtMunicipio = ddlMunicipios.SelectedValue;
                criteriosPesquisa.IdtPrograma = ddlProgramas.SelectedValue;
                criteriosPesquisa.IdtAcao = ddlAcoes.SelectedValue;
                criteriosPesquisa.IdtIndicador = ddlIndicadores.SelectedValue;
                criteriosPesquisa.PaginaAtual = 1;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                //txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                txtNomeTecnico.Attributes["chave"] = criteriosPesquisa.IdtTecnico;
                txtNomeTecnico.Text = criteriosPesquisa.Tecnico;

                SqlProgramas.SelectParameters["P_IDT_MUN"].DefaultValue = criteriosPesquisa.IdtMunicipio;
                ddlProgramas.DataBind();
                ddlProgramas.Items.Insert(0, new ListItem());
                ddlProgramas.SelectedValue = criteriosPesquisa.IdtPrograma;

                SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtPrograma;
                ddlAcoes.DataBind();
                ddlAcoes.Items.Insert(0, new ListItem());
                ddlAcoes.SelectedValue = criteriosPesquisa.IdtAcao;

                SqlMunicipios.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtTecnico;
                ddlMunicipios.DataBind();
                ddlMunicipios.Items.Insert(0, new ListItem());
                ddlMunicipios.SelectedValue = criteriosPesquisa.IdtMunicipio;

                SqlIndicadoresAcao.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtAcao;
                ddlIndicadores.DataBind();
                ddlIndicadores.Items.Insert(0, new ListItem());
                ddlIndicadores.SelectedValue = criteriosPesquisa.IdtIndicador;

                Pesquisar();
                return true;
            }
            return false;
        }

        protected void Pesquisar()
        {
            string login = usuAut.Login;
            Query qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (ddlIndicadores.SelectedValue != "")
                {
                    Session["PagAtual"] = 1;
                    lblFiltro.Text = "Filtro: Metas do Técnico";
                    string SQL = @"SELECT DECODE(d.tpo_vinc,'C','Cultura','B','Bem de Consumo','E','Espécie Animal','','Sem título') TIT_DESCRICAO, NVL(DATANASC_CONJUGE.DESCRICAO, 'Sem descrição') DESCRICAO, T.DSC_TPO_MED UNIDADE, M.META, I.IDT_IND, T.IDT_TPO_MED, M.IDT_LOTACAO, M.IDT_DESC
                                    FROM SRX_METAS_LOTACOES M 
                                    LEFT JOIN SRX_DESCRICOES_OPCOES DATANASC_CONJUGE ON (M.IDT_DESC = DATANASC_CONJUGE.IDT_DESC)
                                    JOIN SRX_INDICADORES_ACOES I ON (M.IDT_IND = I.IDT_IND)
                                    JOIN SRX_TIPOS_MEDIDAS T ON (M.IDT_TPO_MED = T.IDT_TPO_MED)
                                    WHERE M.IDT_LOTACAO = F_OBTER_LOTACAO_ATIVA(:P_IDT_TEC, :P_IDT_MUN) 
                                      AND I.IDT_IND = :P_IDT_IND 
                                      AND I.IDT_PROG = :P_IDT_PROG AND I.IDT_ACAO = :P_IDT_ACAO
                                    ORDER BY TIT_DESCRICAO, DESCRICAO";
                    try
                    {
                        qy = new Query(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL);
                        qy.AdicionarParametro("P_IDT_TEC", DbType.String, txtNomeTecnico.Attributes["chave"].ToString());
                        qy.AdicionarParametro("P_IDT_MUN", DbType.String, ddlMunicipios.SelectedValue);
                        qy.AdicionarParametro("P_IDT_IND", DbType.String, ddlIndicadores.SelectedValue);
                        qy.AdicionarParametro("P_IDT_PROG", DbType.String, ddlProgramas.SelectedValue);
                        qy.AdicionarParametro("P_IDT_ACAO", DbType.String, ddlAcoes.SelectedValue);
                        gridView.DataSource = qy.ObterDataTable();
                        gridView.DataBind();
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            SalvarPesquisa();
            Pesquisar();
        }

        protected void Ok_Button_Click(object sender, EventArgs e)
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            OracleTransaction transacao = null;
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_MANTER_META";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                comando.Parameters.Add(new OracleParameter("P_IDT_IND", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_TPO_MED", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_LOTACAO", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_IDT_DESC", OracleType.Number));
                comando.Parameters.Add(new OracleParameter("P_META", OracleType.Number));

                transacao = conexao.BeginTransaction();
                comando.Transaction = transacao;

                string idtInd, idtTpoMed, idtLotacao, idtDesc, meta;
                foreach (GridViewRow row in gridView.Rows)
                {
                    idtInd = ((Label)row.FindControl("lblIdtInd")).Text;
                    idtTpoMed = ((Label)row.FindControl("lblIdtTpoMed")).Text;
                    idtLotacao = ((Label)row.FindControl("lblIdtLotacao")).Text;
                    idtDesc = ((Label)row.FindControl("lblIdtDesc")).Text;
                    meta = ((TextBox)row.FindControl("txtMeta")).Text;

                    comando.Parameters["P_IDT_IND"].Value = idtInd;
                    comando.Parameters["P_IDT_TPO_MED"].Value = idtTpoMed;
                    comando.Parameters["P_IDT_LOTACAO"].Value = idtLotacao;

                    if (string.IsNullOrEmpty(idtDesc))
                        comando.Parameters["P_IDT_DESC"].Value = DBNull.Value;
                    else
                        comando.Parameters["P_IDT_DESC"].Value = idtDesc;

                    comando.Parameters["P_META"].Value = meta;

                    comando.ExecuteNonQuery();
                }

                if (gridView.Rows.Count == 0)
                {
                    throw new Exception("Pelo menos uma meta pode ser informada");
                }

                transacao.Commit();
                lblErro.Text = string.Format("Atualização realizada com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            catch (Exception ex)
            {
                transacao.Rollback();
                lblErro.Text = string.Format("*Erro: Problema na alteração da meta do técnico! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                transacao.Dispose();
                comando.Dispose();
                conexao = null;
                transacao = null;
                comando = null;
            }
        }

        protected void Cancelar_Button_Click(object sender, EventArgs e)
        {
            btnPequisar_Click(sender, e);
        }

        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            LimparCriterios();
            SalvarPesquisa();
            gridView.DataSource = null;
            gridView.DataBind();
        }

        private void LimparCriterios()
        {
            criteriosPesquisa = null;

            txtNomeTecnico.Text = "";
            txtNomeTecnico.Attributes.Clear();

            ddlMunicipios.Items.Clear();
            ddlProgramas.Items.Clear();

            ddlAcoes.Items.Clear();

            ddlIndicadores.Items.Clear();
        }

        protected void imbExcluirMeta_Click(object sender, ImageClickEventArgs e)
        {
            string login = usuAut.Login;
            OracleConnection conexao = null;
            OracleCommand comando = null;
            try
            {
                conexao = BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo);

                comando = new OracleCommand();
                comando.CommandText = "P_EXCLUIR_META";
                comando.CommandType = CommandType.StoredProcedure;
                comando.Connection = conexao;

                GridViewRow row = (GridViewRow)((ImageButton)sender).Parent.Parent;

                string idtInd, idtTpoMed, idtLotacao, idtDesc;
                idtInd = ((Label)row.FindControl("lblIdtInd")).Text;
                idtTpoMed = ((Label)row.FindControl("lblIdtTpoMed")).Text;
                idtLotacao = ((Label)row.FindControl("lblIdtLotacao")).Text;
                idtDesc = ((Label)row.FindControl("lblIdtDesc")).Text;

                comando.Parameters.Add(new OracleParameter("P_IDT_IND", idtInd));
                comando.Parameters.Add(new OracleParameter("P_IDT_TPO_MED", idtTpoMed));
                comando.Parameters.Add(new OracleParameter("P_IDT_LOTACAO", idtLotacao));
                if (string.IsNullOrEmpty(idtDesc))
                    comando.Parameters.Add(new OracleParameter("P_IDT_DESC", DBNull.Value));
                else
                    comando.Parameters.Add(new OracleParameter("P_IDT_DESC", idtDesc));
                comando.ExecuteNonQuery();

                lblErro.Text = string.Format("Meta excluída com sucesso! Em {0}", DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;

                // Atualizando o grid...
                Pesquisar();
            }
            catch (Exception ex)
            {
                lblErro.Text = string.Format("*Erro: Problema na exclusão da meta! {0}. Em {1}", ex.Message, DateTime.Now.ToLongTimeString());
                lblErro.Visible = true;
            }
            finally
            {
                if (conexao.State == ConnectionState.Open)
                    conexao.Close();
                comando.Dispose();
                conexao = null;
                comando = null;
            }
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //TODO: ver a questão da segurança...
            //if (e.Row.RowType == DataControlRowType.DataRow)
            //{
            //    //SEGURANÇA
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            //    ((HyperLink)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            //}
        }

        protected void lblErro_Load(object sender, EventArgs e)
        {
            lblErro.Text = "";
            lblErro.Visible = false;
        }
    }
}
